package controllers;

import static controllers.Util.data;
import static java.lang.String.format;

import java.util.List;

import models.Curso;
import models.Nivel_Semestre;
import models.Semestre;
import models.Turma;
import play.db.jpa.GenericModel;
import play.libs.F.Tuple;
import play.mvc.Before;
import play.mvc.Controller;

public class Semestres extends Controller {

	@Before
	static void checkUser() {
		if (!Application.connected().isDefined()) {
			flash.error("Please log in first");
			Application.index();
		}
	}

	public static void formAbrirSemestre() {
		final Tuple<Boolean, List<Nivel_Semestre>> resposta = Curso.abrirSemestre();
		final boolean semestreVazio = resposta._1;
		final List<Nivel_Semestre> niveisSemestre = resposta._2;
		if (semestreVazio) {
			render(niveisSemestre);
		} else {
			formDesativarSemestre();
		}
	}

	public static void formDesativarSemestre() {
		final List<Semestre> semestresAtivo = Semestre.find(
				"select s from Semestre s where s.ativo=true").fetch();
		long id = semestresAtivo.get(0).id;
		render(id);
	}

	public static void desativar(long id) {
		final Semestre semestre = Semestre.findById(id);
		semestre.ativo = false;
		semestre.save();
		flash.success("O Semestre foi desativado com sucesso!");
		formAbrirSemestre();
	}

	public static void inserirSemestre(Semestre semestre,
			List<Nivel_Semestre> niveis_semestre, String dataInicio,
			String dataFim, String dataInicioInscricoes,
			String dataFimInscricoes) {

		final String codSemestre = semestre.descricao.replace("20", "")
				.replace(".", "");
		semestre.dataInicio = data(dataInicio);
		semestre.dataFim = data(dataFim);
		semestre.dataInicioInscricoes = data(dataInicioInscricoes);
		semestre.dataFiminscricoes = data(dataFimInscricoes);
		Curso.inserir(semestre, niveis_semestre, codSemestre);
		flash.success(format("O Semestre, %s foi cadastrado com sucesso!", semestre.descricao));
		formAbrirSemestre();
	}

	public static void formCadastrarTurma() {
		final List<Turma> turmasInativas = Turma.find(
				"select t from Turma t where t.ativa=false").fetch();
		render(turmasInativas);
	}

	public static void formAtivarTurma(long id) {
		final Turma turma = Turma.findById(id);
		render(turma);
	}

	public static void ativar(Turma turma) {
		turma.ativa = true;
		turma.save();
		flash.success(format("A Turma, %s foi cadastrada com sucesso!", turma.cod));
		formCadastrarTurma();
	}
}